#include <my_header.h>

/* Usage: ./2_new__stdout filename */
int main(int argc, char *argv[]){                                  
    ARGS_CHECK(argc, 2);
    int fd = open(argv[1],O_WRONLY | O_CREAT | O_TRUNC,
                  0666);
    ERROR_CHECK(fd, -1, "open");

    // 备份标准输出的fd
    int temp = dup(STDOUT_FILENO);
    // 首次重定向到文件 缓冲区满缓冲 结束时才会刷新缓冲区
    // 也可以手动刷新
    // 将标准输出重定向指向文件
    dup2(fd, STDOUT_FILENO);
    printf("输出到文件！\n");
    // 手动刷新缓冲区
    fflush(stdout);

    // 因为是满缓冲 只会输出到文件
    // 将标准输出重新重定向到终端
    dup2(temp, STDOUT_FILENO);
    // 
    printf("会输出到终端\n");
     // 手动刷新缓冲区
    fflush(stdout);


    //再次将标准输出重定向文件
    dup2(fd, STDOUT_FILENO);
    printf("输出到文件\n");
     // 手动刷新缓冲区
    fflush(stdout);


    close(fd);
    return 0;
}

#if 0
即每一个printf输出后面都加上一个手动刷新缓冲区的fflush操作，此时程序的行为将符合大家的预期：

"how are u\n"将在文件中输出
"I'm fine, and you?\n"将在终端打印

#endif
